맨위로가기

B (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

B는 켄 톰슨이 개발한 프로그래밍 언어이다. 유닉스 운영체제 개발을 위해 BCPL을 기반으로 만들어졌으며, 초기에는 PDP-7과 PDP-11에서 사용되었다. B 언어는 자료형이 없는 특징을 가졌으며, C 언어로 발전하는 과정에서 중요한 역할을 했다. C 언어는 유닉스 운영체제 개발에 사용되었고, 한국의 IT 산업에도 간접적으로 영향을 미쳤다.

더 읽어볼만한 페이지

  • 절차적 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • 절차적 프로그래밍 언어 -
    펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다.
B (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보
이름B
개발 연도1969년
설계자켄 톰슨
개발자켄 톰슨, 데니스 리치
자료형자료형 없음 (모든 것은 워드)
영향을 받은 언어BCPL, PL/I, TMG
영향을 준 언어C
파일 확장자.b
기술 정보
프로그래밍 패러다임절차적
튜링 완전성
기타
라이선스알 수 없음 (제공된 문서에 정보 없음)

2. 역사

B는 사실상 C의 조상 언어로 볼 수 있다. B 언어로 만든 프로그램은 컴파일러에 의해 중간 코드로 변환되어 실행하는 인터프리터를 필요로 했다. 실행 시에는 인터프리터 번역 순서대로 처리되기 때문에 실행 속도가 매우 느렸다. 단, PDP-7 버전은 기계어로 처리할 수 있도록 개선되었다.[2]

초기에는 유닉스를 사용한 DEC의 PDP-7PDP-11과 GCOS OS가 동작하는 허니웰의 36비트 메인프레임에서 사용되었다. 최초의 PDP-7용에서는 스레드 코드로 컴파일되었고, 데니스 리치가 기계어로 출력하는 컴파일러를 만들었다. 1970년에 PDP-11이 도입되었지만, 이식에는 스레드 코드가 사용되었다. 이때 최초의 yacc가 PDP-11용으로 개발되었다. 데니스 리치는 이 시기에 유지보수를 담당했다.[2]

B 언어는 BCPL의 영향을 그대로 받았기 때문에 B라는 명칭 또한 BCPL의 머리글자를 따왔을 가능성이 높다. 하지만 켄 톰슨은 멀틱스에서 사용하기 위해 전혀 다른 방식의 언어인 Bon을 고안했는데, 이것이 이름의 유래일 가능성도 있다.

2. 1. 개발 배경

켄 톰슨은 DEC의 컴퓨터 PDP-7유닉스를 개발하고 있었지만, 당시 유닉스는 어셈블리 언어로만 프로그램 개발이 가능했다. 그래서 켄 톰슨은 유닉스에서 동작하는 고급 언어 개발을 시작했다. 그는 유닉스 개발 이전에 멀틱스 개발에 참여하고 있었는데, 멀틱스의 BCPL을 바탕으로 B 언어를 개발했다.[2]

B 언어는 켄 톰슨이 당시의 미니컴의 메모리 용량에서 작동할 수 있게 하려고 불필요한 구성 요소(컴포넌트)를 제거한 일종의 BCPL 시스템이었다. BCPL이나 Forth와 같이 B 언어는 워드 형태의 1개의 데이터형만 가지고 있었다. 많은 연산자(사칙 연산 등)는 이 데이터를 정수로 취급하였고, 그 이외에는 모두 포인터로 다루었다. 그 외의 부분은 C 언어의 초기 버전과 비슷하며, C 언어의 표준 입출력 라이브러리에 비견되는 라이브러리를 가지고 있었다.[3]

B 언어는 BCPL의 영향을 그대로 받았기 때문에 B라는 명칭 또한 BCPL의 머리글자를 따왔을 가능성이 높다. 하지만 켄 톰슨은 멀틱스에서 사용하기 위해 전혀 다른 방식의 언어인 Bon을 고안했는데, 이것이 이름의 유래일 가능성도 있다. 켄 톰슨은 다음과 같이 회고했다.

2. 2. 초기 개발 (1969년)

켄 톰슨은 멀틱스 프로젝트에서 사용했던 BCPL 언어를 기반으로 B 언어를 설계했다. B 언어는 기본적으로 톰슨이 당시 미니컴퓨터의 메모리 용량에 맞추기 위해 불필요하다고 생각한 구성 요소를 제거한 BCPL 시스템이었다. BCPL에서 B 언어로 전환하는 과정에는 톰슨의 선호에 따른 변경 사항도 포함되었는데, 주로 프로그램에서 공백이 아닌 문자의 수를 줄이는 방향이었다.[2]

BCPL의 ALGOL과 유사한 구문은 이 과정에서 상당 부분 변경되었다. 예를 들어, 대입 연산자 `:='`는 루터샤우저의 Superplan에서 사용된 `=`로 변경되었고, 동등 연산자 `=`는 `==`로 대체되었다.[2]

톰슨은 `x =+ y` 구문(C에서는 `+=` 연산자)을 사용하여 x에 y를 더하는 "두 주소 할당 연산자"를 추가했다. 이 구문은 더글러스 맥클로이가 TMG를 구현하면서 비롯되었으며, B의 컴파일러가 처음 구현되었고, ALGOL 68의 `x +:= y` 구문에서 TMG로 전달되었다.[2][5] 톰슨은 여기서 더 나아가 증가 및 감소 연산자(`++` 및 `--`)를 만들었는데, 접두사 또는 접미사 위치에 따라 값을 변경하기 전 또는 후에 가져올지 결정했다. 그러나 이 기능은 B의 초기 버전에는 없었다. 데니스 리치에 따르면, DEC PDP-11의 자동 증가 및 자동 감소 주소 모드를 위해 만들어졌다고 추측되기도 하지만, B가 처음 개발되었을 때는 해당 기계가 존재하지 않았기 때문에 이는 사실이 아니다.[2]

for 루프의 세미콜론 버전은 켄 톰슨이 스티븐 존슨의 연구에서 가져온 것이다.[6]

2. 3. 발전과 C 언어로의 진화

B 언어는 켄 톰슨, 데니스 리치, 브라이언 커니핸에 의해 개량되어 NewB(NB)를 거쳐 C 언어로 발전했다.[2]

B 언어는 자료형이 없는 설계로 허니웰이나 PDP-7과 같은 낡은 컴퓨터에서는 쓸모있었지만, PDP-11이나 현대적인 컴퓨터가 지원하는 문자 자료형을 적절히 처리할 수 없었기 때문에 문제가 되었다. 1971년 데니스 리치는 컴파일러가 기계어 코드를 생성할 수 있도록 하는 한편 자료형 변수를 추가하는 등 전면적인 변경을 시도했다. 1971년부터 1972년까지 B 언어는 NewB 언어로 진화했고, 앨런 슈나이더(Alan Snyder)의 강력한 요구로 전처리기가 더해져 1972년부터 1973년 초까지 C 언어로 진화했다. 1973년 여름, PDP-11용 유닉스가 C 언어로 다시 작성되어 이러한 노력은 완전한 결실을 맺게 되었다.

1973년에는 허니웰 635 시스템에서 IBM 360/370 시스템으로 이식할 필요성이 제기되었는데, 이 과정에서 마이크 레스크(Mike Lesk)는 훗날 C 언어 표준 입출력 라이브러리(stdio)가 되는 《범용 I/O 패키지》를 작성했다.

2. 4. 유산과 영향

B 언어는 C 언어로 대체되어 현재는 거의 사용되지 않는다.[12] 그러나 GCOS 메인프레임()[11]과 특정 임베디드 시스템()[12]에서 소규모 시스템의 제한된 하드웨어, 광범위한 라이브러리, 도구, 라이선스 비용 문제, 그리고 단순히 작업에 충분하다는 등의 여러 가지 이유로 계속 사용되었다.[12] 매우 영향력 있는 AberMUD는 원래 B로 작성되었다.

B 언어는 C 언어를 거쳐 현대의 프로그래밍 언어에 많은 영향을 주었다. 특히 C 언어는 한국의 IT 산업 발전에도 큰 영향을 주었기에, B 언어는 한국 IT 발전에도 간접적으로 기여했다고 볼 수 있다.

3. 특징

B는 실질적인 C의 조상 언어로, 컴파일러에 의해 중간 코드로 변환되어 인터프리터를 통해 실행되는 방식이었다. 이 때문에 실행 속도가 매우 느렸지만, PDP-7 버전은 기계어로 처리할 수 있도록 개선되었다.[14]

켄 톰슨은 BCPL을 바탕으로 B 언어를 개발했으며, 이후 데니스 리치, 브라이언 커니핸과 함께 NewB(NB)를 거쳐 C 언어로 발전시켰다.

B 언어는 초기에 자료형이 없는 설계였으나, 1971년 데니스 리치가 컴파일러가 기계어 코드를 생성하고 자료형 변수를 추가하는 등 전면적인 변경을 가했다. 1972년에는 앨런 슈나이더(Alan Snyder)의 요구로 전처리기가 추가되면서 초기 C 언어로 진화했다.

B 언어는 1990년대까지 허니웰 메인프레임에서 사용되었고, 일부 임베디드 시스템이나 다중 사용자 온라인 게임 AberMUD 등에도 활용되었다.

B 언어의 명칭은 BCPL의 머리글자를 따왔을 가능성이 있지만, 켄 톰슨이 고안한 Bon 언어에서 유래했을 수도 있다.

3. 1. 기술적 측면

B 언어는 BCPL이나 Forth와 같이 워드 형태의 1개의 데이터형만 가지고 있었다. 많은 연산자(사칙 연산 등)는 이 데이터를 정수로 취급하였고, 그 이외에는 모두 포인터로 다루었다.[14] 그 이외의 부분은 C 언어의 초기 버전과 비슷하다. C 언어의 표준 입출력 라이브러리에 비견되는 라이브러리를 가지고 있었다.

초기에는 유닉스를 사용한 DEC의 PDP-7용과 PDP-11에서 사용되었고, GCOS라고 하는 OS가 동작하는 허니웰의 36비트 메인프레임에도 사용되었다. 최초의 PDP-7용에서는 스레드 코드로 컴파일하였고, 데니스 리치가 기계어로 출력하는 컴파일러를 만들었다.[14] 1970년에 PDP-11에 도입되었지만 역시 이식에는 스레드 코드가 사용되었다. 이때 최초의 yacc가 PDP-11용으로 개발되었다. 데니스 리치는 이 시기에 유지보수를 담당했다.

B 언어는 자료형이 없는 설계로 허니웰이나 PDP-7과 같은 낡은 컴퓨터에서는 쓸모있었지만, PDP-11이나 현대적인 컴퓨터가 지원하는 문자 자료형을 적절히 처리할 수 없었기 때문에 문제가 되었다.

3. 2. 설계 철학

B 언어는 재귀 호출을 지원하고, 비수치형 데이터를 다룰 수 있으며, 특정 기종에 의존하지 않는 범용적인 언어였다. 운영체제나 다른 언어 개발을 목표로 설계되었다.[14] 켄 톰슨은 B 언어를 설계하면서 간결성과 효율성을 중시했는데, 이는 훗날 C 언어의 설계에도 큰 영향을 미쳤다. B 언어는 제한된 메모리 용량을 가진 미니 컴퓨터와 같은 하드웨어 자원을 가진 시스템에서도 동작할 수 있도록 설계되었다.

B 언어는 데이터 형식이 없는 대신, 하드웨어의 CPU 레지스터에 대응하는 워드형 1종에 의존하는 방식을 채택했다. 이는 어떤 비트 길이의 CPU에도 대응할 수 있도록 하기 위함이었다. 워드는 문맥에 따라 정수 또는 메모리 주소로 취급되었다. 그러나 ASCII 코드가 일반화되고, 벨 연구소에 PDP-11이 도입되면서 문자 데이터형의 지원이 중요해졌다. B 언어와 같이 형식이 없는 언어의 사양은 단점으로 여겨지게 되었고, 켄 톰슨과 데니스 리치는 언어를 확장하여 내부 형식과 사용자 정의 형식을 지원하도록 개선하였다. 이것이 C 언어의 시초가 되었다.

B 언어로 작성된 프로그램은 컴파일러에 의해 중간 코드로 변환되었고, 실행하기 위해서는 인터프리터가 필요했다. 실행 시에는 인터프리터가 번역 순서대로 처리했기 때문에 실행 속도가 매우 느렸다. 다만, PDP-7 버전은 기계어를 출력할 수 있도록 개선되었다.

4. 문법 (Syntax)

B 언어는 문법이 매우 간결하다. 다음은 B 언어의 주요 문법 요소이다.


  • 주석: `/*` 와 `*/` 사이에 작성한다.
  • 변수 선언: 모든 변수는 `auto` 키워드를 사용하여 선언한다.
  • 함수 정의: 함수는 다음과 같은 형태로 정의한다.


```

name(parameters) {

statements

}

```

  • 제어문: `if`, `while`, `switch`, `goto` 문을 사용할 수 있다.
  • 표현식: B 언어는 다양한 연산자를 지원하는 표현식을 사용할 수 있다.

5. 코드 예제

c

/* 다음 함수는 음수가 아닌 정수 n을 b진수 형태로 출력한다 (단, 2<=b<=10).

이 루틴은 ASCII 문자 코드 값이 0에서 9까지 연속하고 있음을 이용하고 있다. */

printn(n,b) {

extrn putchar;

auto a;

if(a=n/b) /* 대입문. 등차 비교가 아님 */

printn(a, b); /* 재귀 호출 */

putchar(n%b + '0');

}

```[3]

```c

/* 다음 프로그램은 네이피어 상수 e-2를 약 4000개의 소수 자릿수까지 계산하여 5자 그룹으로 각 줄에 50개의 문자로 인쇄한다. 방법은 단순한 출력 변환으로, 다음과 같은 전개식이다.

1/2! + 1/3! + ... = .111...

여기서 숫자의 기수는 2, 3, 4, ...이다. */

main() {

extrn putchar, n, v;

auto i, c, col, a;

i = col = 0;

while(i
v[i++] = 1;

while(col<2*n) {

a = n+1;

c = i = 0;

while(i
c =+ v[i]*10;

v[i++] = c%a;

c =/ a--;

}

putchar(c+'0');

if(!(++col%5))

putchar(col%50?' ':'*n');

}

putchar('*n*n');

}

v[2000];

n 2000;

```[14]

켄 톰슨(Ken Thompson)의 ''B 사용자 참조(Users' Reference to B)''에는 B 언어의 특징을 보여주는 두 가지 예제 코드가 수록되어 있다. 첫 번째 예제는 `printn` 함수로, 주어진 숫자를 특정 진법으로 출력하는 기능을 재귀 호출을 통해 구현한다. 두 번째 예제는 네이피어 상수(e)에서 2를 뺀 값을 소수점 이하 4000자리까지 계산하여 출력하는 프로그램이다. 각 예제에 대한 자세한 설명은 하위 섹션을 참고하면 된다.

5. 1. 예제 1: printn 함수

켄 톰슨이 쓴 ''Users' Reference to B''에서 발췌된 `printn` 함수는 다음과 같다.[3]

```c

/* 다음 함수는 음수가 아닌 정수 n을 b진수 형태로 출력한다 (단, 2<=b<=10).

이 루틴은 ASCII 문자 코드 값이 0에서 9까지 연속하고 있음을 이용하고 있다. */

printn(n,b) {

extrn putchar;

auto a;

if(a=n/b) /* 대입문. 등차 비교가 아님 */

printn(a, b); /* 재귀 호출 */

putchar(n%b + '0');

}

```

이 함수는 음수가 아닌 정수 `n`을 `b`진수로 출력한다. (단, 2 ≤ `b` ≤ 10) 함수의 작동 방식은 다음과 같다.

  • `extrn putchar;`: 외부 변수 `putchar`를 선언한다. `putchar`는 한 문자를 출력하는 함수이다.
  • `auto a;`: 자동 변수 `a`를 선언한다. `auto` 키워드는 함수 범위의 수명을 가진 변수를 선언한다.
  • `if(a=n/b)`: `n`을 `b`로 나눈 몫을 `a`에 할당한다. 이때 `=`는 대입 연산자이며, 동등 비교 연산자(`==`)가 아니다. 만약 `a`가 0이 아니라면 (즉, `n`이 `b`보다 크다면) 참이 되어 if문 안의 내용을 실행한다.
  • `printn(a, b);`: `printn` 함수를 재귀 호출한다. `n`을 `b`로 나눈 몫을 다시 `printn` 함수의 인자로 넣어 호출함으로써, `n`이 `b`보다 작아질 때까지 반복한다.
  • `putchar(n%b + '0');`: `n`을 `b`로 나눈 나머지를 문자 형태로 출력한다. `n%b`는 0에서 9 사이의 값이 되는데, 여기에 문자 '0'의 ASCII 코드 값을 더함으로써 해당 숫자에 해당하는 ASCII 문자 코드를 얻고, `putchar` 함수를 통해 출력한다.


결과적으로, 이 함수는 재귀 호출을 사용하여 큰 자리수부터 작은 자리수 순서로 숫자를 출력한다.

5. 2. 예제 2: 네이피어 상수(e) 계산

c

/* 다음 프로그램은 네이피어 상수 e를 소수점 이하 4000자리까지 계산하여,

한 행에 5개씩 그룹으로 나누어 50개 문자를 출력한다.

이 방법은 다음 식을 단순하게 확장한 것이다.

1/2! + 1/3! + ... = .111....

이는 각각 2진법, 3진법, 4진법... 에 대응한다. */

main() {

extrn putchar, n, v;

auto i, c, col, a;

i = col = 0;

while (i < n)

v[i++] = 1;

while (col < 2 * n) {

a = n + 1;

c = i = 0;

while (i < n) {

c =+ v[i] * 10;

v[i++] = c % a;

c =/ a--;

}

putchar(c + '0');

if (!(++col % 5))

putchar(col % 50 ? ' ' : '*n');

}

putchar('*n*n');

}

v[2000];

n 2000;

```[14]

이 프로그램은 네이피어 상수(e)를 소수점 이하 4000자리까지 계산한다. 5개의 숫자마다 공백을 추가하고, 50개의 숫자(10개의 그룹)마다 줄 바꿈을 하여 결과를 출력한다.[3]

프로그램 작동 원리는 다음과 같다.

  • `v[2000]` 배열은 각 자릿수를 저장하는 데 사용되며, 초기에는 모든 요소가 1로 설정된다.
  • `n`은 계산할 자릿수를 나타내며 2000으로 설정되어 있다.
  • 바깥쪽 `while` 루프는 출력할 총문자 수가 `2*n` (4000)이 될 때까지 반복한다.
  • 안쪽 `while` 루프는 각 자릿수를 계산한다.
  • `c`는 올림을 처리하는 변수이다.
  • `v[i]`에 10을 곱하고 `c`를 더한다.
  • `v[i]`를 `a`로 나눈 나머지를 `v[i]`에 저장한다.
  • `c`를 `a`로 나눈 몫을 `c`에 저장한다.
  • `a`를 1 감소시킨다.
  • `putchar(c+'0')`는 계산된 자릿수 `c`를 문자로 변환하여 출력한다.
  • 5개의 숫자를 출력할 때마다 공백을, 50개의 숫자를 출력할 때마다 줄 바꿈을 출력한다.

6. B 언어와 한국의 IT 산업 (추가)

B 언어는 한국의 IT 산업에 직접적으로 사용된 사례는 드물다. 그러나 B 언어는 C 언어로 발전하였고, C 언어는 한국 IT 산업 발전에 큰 영향을 미쳤다. 따라서 B 언어는 C 언어를 통해 간접적으로 한국 IT 산업에 영향을 미쳤다고 볼 수 있다.

6. 1. C 언어의 영향

B 언어는 데니스 리치브라이언 커니핸에 의해 개량되어 NewB(NB)를 거쳐 C 언어로 발전하게 되었다.[2] 1971년 데니스 리치는 B 언어에 자료형을 추가하고 컴파일러가 기계어 코드를 생성할 수 있도록 변경하였다.[6] 이후 B 언어는 NewB 언어로 진화했고, 전처리기가 더해져 1972년1973년에 초기의 C 언어가 되었다.[6] 1973년 여름, PDP-11용 유닉스가 C 언어로 다시 작성되면서 이러한 노력은 결실을 맺었다.[6]

6. 2. 유닉스와의 연관성

켄 톰슨은 DEC의 컴퓨터 PDP-7로 유닉스를 개발하고 있었지만, 당시 유닉스는 어셈블리 언어로만 프로그램 개발을 할 수 있었다. 그래서 켄 톰슨은 유닉스에서 동작하는 고급 언어 개발을 시작했다. 그는 유닉스 개발 이전에 멀틱스 개발에 참여했었는데, 멀틱스의 BCPL을 바탕으로 B 언어를 개발했다.[1]

이후 B 언어는 켄 톰슨 자신과 데니스 리치, 브라이언 커니핸에 의해 개량되어 NewB(NB)를 거쳐 C 언어로 발전하게 된다.[1] 1973년 여름, PDP-11용 유닉스가 C 언어로 다시 작성되었다.[1]

참조

[1] 웹사이트 B - computer programming language http://www.britannic[...]
[2] 간행물 The Development of the C Language http://www.bell-labs[...] 1993-03
[3] 웹사이트 Users' Reference to B https://www.bell-lab[...] Bell Laboratories 2014-03-21
[4] 웹사이트 "A damn stupid thing to do"—the origins of C https://arstechnica.[...] 2020-12-09
[5] 웹사이트 Interview with M.D. McIlroy https://www.princeto[...] 1989-08-18
[6] 웹사이트 VCF East 2019 -- Brian Kernighan interviews Ken Thompson https://www.youtube.[...] 2020-11-16
[7] 간행물 The Evolution of the Unix Time-sharing System https://www.bell-lab[...]
[8] 웹사이트 TMG http://www.multician[...] multicians.org
[9] 웹사이트 The Development of the C Language https://www.bell-lab[...] Bell Labs/Lucent Technologies
[10] 간행물 A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 http://www.cs.dartmo[...]
[11] 웹사이트 Thinkage UW Tools Package http://www.thinkage.[...] Thinkage, Ltd. 2014-03-26
[12] 웹사이트 THE PROGRAMMING LANGUAGE B https://www.bell-lab[...] Bell Laboratories 2014-03-21
[13] 웹사이트 B - computer programming language http://www.britannic[...] 2019-11-29
[14] 웹사이트 Users' Reference to B https://www.bell-lab[...] Bell Laboratories 2014-03-21
[15] 간행물 The Development of the C Language http://www.bell-labs[...] 1993-03
[16] 웹사이트 TMG http://www.multician[...] multicians.org 2019-11-29
[17] 웹사이트 The Development of the C Language https://www.bell-lab[...] Bell Labs/Lucent Technologies 2019-11-29
[18] 간행물 A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 http://www.cs.dartmo[...]
[19] 웹사이트 Thinkage UW Tools Package http://www.thinkage.[...] Thinkage, Ltd. 2014-03-26
[20] 웹사이트 THE PROGRAMMING LANGUAGE B https://www.bell-lab[...] Bell Laboratories 2014-03-21



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com